annotationsとTYPE_CHECKINGでPython Lambdaにおいてboto3-stubsをデプロイパッケージに含めずに使う

annotationsとTYPE_CHECKINGでPython Lambdaにおいてboto3-stubsをデプロイパッケージに含めずに使う

Clock Icon2024.12.28

こんばんは、製造ビジネステクノロジー部の夏目です。

今回OSSのコントリビュート中に、PythonのTypeHintsで痒いところに手の届く内容を見つけたので共有します。

何を見つけたのか

Pythonでboto3を使うとき、そのままではIDEの補完もほとんど効かないためboto3-stubsを使うことがあります。

しかしTypeHintsで記載しているとデプロイパッケージにboto3-stubsを入れる必要がありました。

今回、デプロイパッケージにboto3-stubsを入れずに使う方法を見つけました。

annotationsとTYPE_CHECKINGで実行時は気にしなくてよくなる

from __future__ import annotations

import json
from typing import TYPE_CHECKING

import boto3

if TYPE_CHECKING:
    from mypy_boto3_sts import STSClient

sts: STSClient = boto3.client("sts")

def lambda_handler(event, context):
    resp = sts.get_caller_identity()
    print(
        json.dumps(
            resp,
            ensure_ascii=False,
            default=lambda x: {"type": str(type(x)), "value": str(x)},
        )
    )

一行目に、

from __future__ import annotations

TypeHints用にimportする部分で、

if TYPE_CHECKING:
    from mypy_boto3_sts import STSClient

と書くことでLambdaのDeploy Packageに boto3-stubs[sts]がなくても実行時にエラーが出ないようになる。

ただ、何故大丈夫なのかはわかっていません、すみません。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.